


# 创建项目
# django-admin startproject myproject
# 进入项目目录
# cd myproject
# 创建应用
# python manage.py startapp myapp
# # 清除所有迁移文件
# find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
# find . -path "*/migrations/*.pyc" -delete

# # 清除所有 pycache
# find . -name "__pycache__" -exec rm -rf {} +
# find . -name "*.pyc" -delete

# # 删除数据库（如果是 SQLite）
# rm -f db.sqlite3
# python manage.py makemigrations
# python manage.py migrate
# python manage.py createsuperuser 
# python manage.py runserver 0.0.0.0:8999







# 中间件的五个常用方法：

# 1. __init__(self, get_response)
# 这是中间件的初始化方法，Django在启动时调用一次。它接收一个参数get_response，该参数是一个可调用对象，它接受请求并返回响应。
# 2. __call__(self, request)
# 这个方法在每个请求中被调用。您可以在此方法中处理请求逻辑，比如记录请求信息或进行身份验证等，最后需要调用get_response(request)以获取视图的响应。
# 3. process_view(self, request, view_func, view_args, view_kwargs)
# 在视图函数被调用之前，这个方法会被调用。您可以在这里修改请求或决定是否调用视图。返回值可以是一个 HttpResponse 对象，如果返回，则后续的视图和中间件将不会被调用。
# 4. process_exception(self, request, exception)
# 当视图处理过程中抛出异常时，这个方法会被调用。您可以在这里记录异常信息或返回一个自定义的错误响应。
# 5. process_template_response(self, request, response)
# 在视图返回一个模板响应时该方法被调用。您可以在这里对响应进行修改，通常用于添加一些上下文数据或调整响应内容。




# 中间件的应用场景
# 身份验证和授权：在请求到达视图之前，检查用户是否已登录并具有足够的权限。这常用于保护某些视图。
# 请求记录：记录每个请求的访问信息，比如请求时间、IP地址等。这对后续的日志分析和数据统计很有帮助。
# 错误处理：捕获视图中未处理的异常，并返回友好的错误页面或 JSON 响应，增强用户体验。
# 国际化支持：在请求中解析用户的语言和地区信息，并设置相应的语言环境。
# 跨域资源共享 (CORS)：处理 CORS 请求，允许或拒绝特定的跨域请求。





# -------------------------------------测试---------------------------------------
# myapp/tests.py

from django.test import TestCase
from .models import MyModel

class MyModelTest(TestCase):

    def setUp(self):
        MyModel.objects.create(name="Test Name")

    def test_mymodel_creation(self):
        """确保 MyModel 实例正确创建"""
        my_model_instance = MyModel.objects.get(name="Test Name")
        self.assertEqual(my_model_instance.name, "Test Name")


# python manage.py test myapp




# django 和 fastapi
# 1. 理解真个请求过程
# 2. 中间件
# 3. orm


# -------------------------------------MTV---------------------------------------
# M ：  处理数据和业务逻辑，定义了数据字段和操作这些数据字段的业务规则
# V：   充当 model 和 template 之间的粘合剂
#         核心任务是：接受请求，匹配路由，于modle交互进行数据库操作，进行表单数据验证，
#                     准备展示给用户的上下文，交个一个template进行渲染，最终生成html的响应
# T：   负责将数据呈现给用户
# 核心设计： 将 页面展示， 业务处理， 数据管理 分开